package com.ttx.pattern.example.template.extend;

/**
 * @author TimFruit
 * @date 2019/5/28 8:33
 */

public abstract class AbstractClazz  {
    
    private boolean merge=true;

    // --------------------------- 基本方法 
    public abstract void prepare();
    
    public abstract void spilt();
    
    public abstract void merge();
    
    
    // --------------------------- 模板方法
    public final void templateMethod(){ 
        prepare();
        spilt();
        if(isMerge()){  // 钩子函数， 用于控制模板方法中的算法步骤
            System.out.println("钩子函数为true");
            merge();
        }else {
            System.out.println("钩子函数为false, 不合并...");
        }
    }

    public boolean isMerge() {
        return merge;
    }

    public void setMerge(boolean merge) {
        this.merge = merge;
    }
}
